Congestion control is a mechanism in a node of a data network, e.g. in an end-host, that regulates traffic flows generated by the node in order to avoid excessive packet losses, in turn causing excessive re-transmissions adding to the congestion. This is done in order to guarantee acceptable goodput, i.e. application level throughput, for all the traffic flows sharing a network resource, which has become a bottleneck. One typical example of such congestion control mechanism is the additive-increase/multiplicative-decrease (AIMD)-like congestion control behavior of Transmission Control Protocol (TCP) that ensures both fairly good link utilization and thus high goodput, and also that the traffic flows will share the bottleneck network resource in an approximately fair way. Other transport protocols, such as User Datagram Protocol (UDP), do not have congestion avoidance algorithms. In many cases, some adaptation to the congestion is done by applications run on the node.
There is a trend currently towards many different application streams sharing the same transport protocol. One example is the Web Real-Time Communication (WebRTC) application that multiplexes audio, video and data streams on the same UDP connection. Another example is the Hyper-Text Transfer Protocol (HTTP) 2.0 protocol currently under standardization that multiplexes many streams corresponding to different object transfers into the same Transport Layer Security (TLS)/TCP connection. Experimental transport protocol proposal have recently been put forward, which are also based on this multiplexing paradigm. In case of multiplexing, several streams of potentially different characteristics share the same connection.